Setup

Packages

# Packages
require(ggplot2)
require(plotly)
require(geojsonio)
require(sp)
require(sf)
require(rvest)
require(RSelenium)
require(htmltools)
require(ggmap)
require(lubridate)
require(stringr)

Data

# Download file for state info

url = "https://opendata.arcgis.com/datasets/5f45e1ece6e14ef5866974a7b57d3b95_1.geojson"

file = "NJ_counties.geojson"

download.file(url,file)
trying URL 'https://opendata.arcgis.com/datasets/5f45e1ece6e14ef5866974a7b57d3b95_1.geojson'
Content type 'application/json' length unknown
downloaded 8.4 MB
rm(url)
# Convert file to sf object 

file = "NJ_counties.geojson"

NJ_Counties <-
  geojson_sf(file)
rm(file)
# Clean Data 

NJ_Counties_Cleaned <- 
  NJ_Counties %>%
  transmute(
    county = COUNTY,
    CO = CO,
    pop = POP2010,
    popdensity = POPDEN2010,
    Shape_Length = Shape_Length,
    Shape_Area = Shape_Area,
    GNIS = GNIS
  )
#get page source from website

gc()
           used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  4676000 249.8    7330683 391.6  7330683 391.6
Vcells 16384116 125.1   34559173 263.7 34559173 263.7
driver <- rsDriver(browser = c("firefox"), port = 44454L)
checking Selenium Server versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking chromedriver versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking geckodriver versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking phantomjs versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
[1] "Connecting to remote server"
$acceptInsecureCerts
[1] FALSE

$browserName
[1] "firefox"

$browserVersion
[1] "84.0"

$`moz:accessibilityChecks`
[1] FALSE

$`moz:buildID`
[1] "20201211215739"

$`moz:geckodriverVersion`
[1] "0.28.0"

$`moz:headless`
[1] FALSE

$`moz:processID`
[1] 2128

$`moz:profile`
[1] "C:\\Users\\Devansh\\AppData\\Local\\Temp\\rust_mozprofilex2sKxq"

$`moz:shutdownTimeout`
[1] 60000

$`moz:useNonSpecCompliantPointerOrigin`
[1] FALSE

$`moz:webdriverClick`
[1] TRUE

$pageLoadStrategy
[1] "normal"

$platformName
[1] "windows"

$platformVersion
[1] "10.0"

$rotatable
[1] FALSE

$setWindowRect
[1] TRUE

$strictFileInteractability
[1] FALSE

$timeouts
$timeouts$implicit
[1] 0

$timeouts$pageLoad
[1] 300000

$timeouts$script
[1] 30000


$unhandledPromptBehavior
[1] "dismiss and notify"

$webdriver.remote.sessionid
[1] "79262589-c403-4b36-b334-63af6392461e"

$id
[1] "79262589-c403-4b36-b334-63af6392461e"
remote_driver <- driver[["client"]] 
remote_driver$navigate("https://www.childrens-specialized.org/locations-directory/?")

page <- remote_driver$getPageSource()
# Retrieve information from directory

Xpathgen1 = "/html/body/div[1]/div/div/div[2]/div/div[2]/div["

Xpathgen2 = "]/div/div[2]/article"

Hosinfo <- data.frame()

for (i in 1:15){
  XPath <- paste(Xpathgen1,i,Xpathgen2,sep = "")
  Node <- page[[1]] %>% 
    read_html() %>%
    html_nodes(xpath = XPath)
  name <-
    Node[[1]] %>%
    html_node("h2") %>%
    html_text()
  address <-
    Node[[1]] %>%
    html_node("h3") %>%
    html_text() %>%
    gsub(pattern = "\n *",replacement = " ", x = .)
  for (i in 1:7){
  XPathday <- paste(XPath,"/div[",i,"]",sep = "")
  day <- page[[1]] %>% 
    read_html() %>%
    html_nodes(xpath = XPathday) %>%
    html_attr("class") %>%
    grep("-Hours",x = .,value = TRUE) %>%
    gsub("-Hours","",x = .)
  times <-
    page[[1]] %>% 
    read_html() %>%
    html_nodes(xpath = XPathday) %>%
    html_node("h3") %>%
    html_text()
  assign(day,times)
  }
  row = data.frame(name,address,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday)
  Hosinfo <-  rbind(Hosinfo,row)
}

# Write csv file 

write.csv(Hosinfo, "Hospitals.csv")
# Data Wrangling

Hosinfo <- read.csv("Hospitals.csv")

pattern <- "([0-1]*[0-9]:[0-5][0-9] *[AaPp][Mm][-to ]+[0-1]*[0-9]:[0-5][0-9] *[AaPp][Mm])"

Hosloc <- 
  Hosinfo %>%
  select(name,address) %>%
  mutate_geocode(address) # Requires google API key
Source : https://maps.googleapis.com/maps/api/geocode/json?address=815+Broadway+Bayonne,+NJ+07002&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=1135+Broad+Street+Clifton,+NJ+07013&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=629+Cranbury+Road+East+Brunswick,+NJ+08816&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=6106+Black+Horse+Pike+Egg+Harbor+Township,+NJ+08234&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=3575+Quakerbridge+Road+Hamilton,+NJ+08619&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=1825+John+F+Kennedy+Boulevard+Jersey+City,+NJ+07305&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=150+New+Providence+Road+Mountainside,+NJ+07092&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=150+New+Providence+Road+Mountainside,+NJ+07092&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=200+Somerset+Street+New+Brunswick,+NJ+08901-1942&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=10+Plum+Street+-+6th+Floor+New+Brunswick,+NJ+08901&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=182+Lyons+Ave+Newark,+NJ+07112&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=368+Lakehurst+Road+Toms+River,+NJ+08755&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=94+Stevens+Road+Toms+River,+NJ+08755&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=94+Stevens+Road+Toms+River,+NJ+08755&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
Source : https://maps.googleapis.com/maps/api/geocode/json?address=266+King+George+Road+Warren,+NJ+07059&key=xxx-vZXjfiqGU6SJbdE2Q4XEoBqUySIL0
rm(pattern)

write.csv(Hosloc,"Hospitalsloc.csv")

Graphs

# Population heat maps of NJ using plotly and plot

NJ <-
  NJ_Counties_Cleaned %>%
  ggplot() +
  scale_fill_gradientn(colours=c("white", "blue")) +
  geom_sf(aes(fill = pop)) 
  theme(legend.position = "None") +
  theme(axis.ticks = element_blank(),
        axis.text = element_blank())


ggplotly(NJ)

NJ

plot(NJ_Counties_Cleaned["pop"])

# Location of Hospitals in NJ on heatmap

Hosloc <- read.csv("Hospitalsloc.csv")

# Only need out patient centers 

Hosloc <-
  Hosloc %>%
  filter(grepl("Outpatient", name))


NJ <-
  NJ_Counties_Cleaned %>%
  ggplot() +
  scale_fill_gradientn(colours=c("white", "blue")) +
  geom_sf(aes(fill = pop)) +
  geom_point(data = Hosloc,aes(x = lon,y = lat,shape = "square", label = name,color = "orange")) +
  theme(legend.position = "None") +
  theme(axis.ticks = element_blank(),
        axis.text = element_blank(),
        title = element_text(size = 9)
        ) +
  labs(y = "",
       x = "",
       title = "2010 Population Heatmap\nwith Outpatient centers from CSH")
Ignoring unknown aesthetics: label
NJ


ggplotly(NJ,tooltip = "name")

NA
LS0tDQp0aXRsZTogIkdlb2pzb24gVGVzdGluZyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBTZXR1cA0KDQojIyMjIFBhY2thZ2VzDQoNCmBgYHtyfQ0KIyBQYWNrYWdlcw0KcmVxdWlyZShnZ3Bsb3QyKQ0KcmVxdWlyZShwbG90bHkpDQpyZXF1aXJlKGdlb2pzb25pbykNCnJlcXVpcmUoc3ApDQpyZXF1aXJlKHNmKQ0KcmVxdWlyZShydmVzdCkNCnJlcXVpcmUoUlNlbGVuaXVtKQ0KcmVxdWlyZShodG1sdG9vbHMpDQpyZXF1aXJlKGdnbWFwKQ0KcmVxdWlyZShsdWJyaWRhdGUpDQpyZXF1aXJlKHN0cmluZ3IpDQpgYGANCg0KIyMjIyBEYXRhDQoNCg0KYGBge3J9DQojIERvd25sb2FkIGZpbGUgZm9yIHN0YXRlIGluZm8NCg0KdXJsID0gImh0dHBzOi8vb3BlbmRhdGEuYXJjZ2lzLmNvbS9kYXRhc2V0cy81ZjQ1ZTFlY2U2ZTE0ZWY1ODY2OTc0YTdiNTdkM2I5NV8xLmdlb2pzb24iDQoNCmZpbGUgPSAiTkpfY291bnRpZXMuZ2VvanNvbiINCg0KZG93bmxvYWQuZmlsZSh1cmwsZmlsZSkNCg0Kcm0odXJsKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDb252ZXJ0IGZpbGUgdG8gc2Ygb2JqZWN0IA0KDQpmaWxlID0gIk5KX2NvdW50aWVzLmdlb2pzb24iDQoNCk5KX0NvdW50aWVzIDwtDQogIGdlb2pzb25fc2YoZmlsZSkNCnJtKGZpbGUpDQpgYGANCg0KYGBge3J9DQojIENsZWFuIERhdGEgDQoNCk5KX0NvdW50aWVzX0NsZWFuZWQgPC0gDQogIE5KX0NvdW50aWVzICU+JQ0KICB0cmFuc211dGUoDQogICAgY291bnR5ID0gQ09VTlRZLA0KICAgIENPID0gQ08sDQogICAgcG9wID0gUE9QMjAxMCwNCiAgICBwb3BkZW5zaXR5ID0gUE9QREVOMjAxMCwNCiAgICBTaGFwZV9MZW5ndGggPSBTaGFwZV9MZW5ndGgsDQogICAgU2hhcGVfQXJlYSA9IFNoYXBlX0FyZWEsDQogICAgR05JUyA9IEdOSVMNCiAgKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiNnZXQgcGFnZSBzb3VyY2UgZnJvbSB3ZWJzaXRlDQoNCmdjKCkNCmRyaXZlciA8LSByc0RyaXZlcihicm93c2VyID0gYygiZmlyZWZveCIpLCBwb3J0ID0gNDQ0NTRMKQ0KcmVtb3RlX2RyaXZlciA8LSBkcml2ZXJbWyJjbGllbnQiXV0gDQpyZW1vdGVfZHJpdmVyJG5hdmlnYXRlKCJodHRwczovL3d3dy5jaGlsZHJlbnMtc3BlY2lhbGl6ZWQub3JnL2xvY2F0aW9ucy1kaXJlY3RvcnkvPyIpDQoNCnBhZ2UgPC0gcmVtb3RlX2RyaXZlciRnZXRQYWdlU291cmNlKCkNCmBgYA0KDQpgYGB7cn0NCiMgUmV0cmlldmUgaW5mb3JtYXRpb24gZnJvbSBkaXJlY3RvcnkNCg0KWHBhdGhnZW4xID0gIi9odG1sL2JvZHkvZGl2WzFdL2Rpdi9kaXYvZGl2WzJdL2Rpdi9kaXZbMl0vZGl2WyINCg0KWHBhdGhnZW4yID0gIl0vZGl2L2RpdlsyXS9hcnRpY2xlIg0KDQpIb3NpbmZvIDwtIGRhdGEuZnJhbWUoKQ0KDQpmb3IgKGkgaW4gMToxNSl7DQogIFhQYXRoIDwtIHBhc3RlKFhwYXRoZ2VuMSxpLFhwYXRoZ2VuMixzZXAgPSAiIikNCiAgTm9kZSA8LSBwYWdlW1sxXV0gJT4lIA0KICAgIHJlYWRfaHRtbCgpICU+JQ0KICAgIGh0bWxfbm9kZXMoeHBhdGggPSBYUGF0aCkNCiAgbmFtZSA8LQ0KICAgIE5vZGVbWzFdXSAlPiUNCiAgICBodG1sX25vZGUoImgyIikgJT4lDQogICAgaHRtbF90ZXh0KCkNCiAgYWRkcmVzcyA8LQ0KICAgIE5vZGVbWzFdXSAlPiUNCiAgICBodG1sX25vZGUoImgzIikgJT4lDQogICAgaHRtbF90ZXh0KCkgJT4lDQogICAgZ3N1YihwYXR0ZXJuID0gIlxuICoiLHJlcGxhY2VtZW50ID0gIiAiLCB4ID0gLikNCiAgZm9yIChpIGluIDE6Nyl7DQogIFhQYXRoZGF5IDwtIHBhc3RlKFhQYXRoLCIvZGl2WyIsaSwiXSIsc2VwID0gIiIpDQogIGRheSA8LSBwYWdlW1sxXV0gJT4lIA0KICAgIHJlYWRfaHRtbCgpICU+JQ0KICAgIGh0bWxfbm9kZXMoeHBhdGggPSBYUGF0aGRheSkgJT4lDQogICAgaHRtbF9hdHRyKCJjbGFzcyIpICU+JQ0KICAgIGdyZXAoIi1Ib3VycyIseCA9IC4sdmFsdWUgPSBUUlVFKSAlPiUNCiAgICBnc3ViKCItSG91cnMiLCIiLHggPSAuKQ0KICB0aW1lcyA8LQ0KICAgIHBhZ2VbWzFdXSAlPiUgDQogICAgcmVhZF9odG1sKCkgJT4lDQogICAgaHRtbF9ub2Rlcyh4cGF0aCA9IFhQYXRoZGF5KSAlPiUNCiAgICBodG1sX25vZGUoImgzIikgJT4lDQogICAgaHRtbF90ZXh0KCkNCiAgYXNzaWduKGRheSx0aW1lcykNCiAgfQ0KICByb3cgPSBkYXRhLmZyYW1lKG5hbWUsYWRkcmVzcyxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5LFN1bmRheSkNCiAgSG9zaW5mbyA8LSAgcmJpbmQoSG9zaW5mbyxyb3cpDQp9DQoNCnJtKHJvdyxYcGF0aGdlbjEsWHBhdGhnZW4yLFhQYXRoLFhQYXRoZGF5LGksbmFtZSkNCg0KIyBXcml0ZSBjc3YgZmlsZSANCg0Kd3JpdGUuY3N2KEhvc2luZm8sICJIb3NwaXRhbHMuY3N2IikNCmBgYA0KDQpgYGB7cn0NCiMgRGF0YSBXcmFuZ2xpbmcNCg0KSG9zaW5mbyA8LSByZWFkLmNzdigiSG9zcGl0YWxzLmNzdiIpDQoNCnBhdHRlcm4gPC0gIihbMC0xXSpbMC05XTpbMC01XVswLTldICpbQWFQcF1bTW1dWy10byBdK1swLTFdKlswLTldOlswLTVdWzAtOV0gKltBYVBwXVtNbV0pIg0KDQpIb3Nsb2MgPC0gDQogIEhvc2luZm8gJT4lDQogIHNlbGVjdChuYW1lLGFkZHJlc3MpICU+JQ0KICBtdXRhdGVfZ2VvY29kZShhZGRyZXNzKSAjIFJlcXVpcmVzIGdvb2dsZSBBUEkga2V5DQoNCnJtKHBhdHRlcm4pDQoNCndyaXRlLmNzdihIb3Nsb2MsIkhvc3BpdGFsc2xvYy5jc3YiKQ0KDQpgYGANCg0KDQojIyMgR3JhcGhzIA0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KDQpgYGB7cn0NCiMgUG9wdWxhdGlvbiBoZWF0IG1hcHMgb2YgTkogdXNpbmcgcGxvdGx5IGFuZCBwbG90DQoNCk5KIDwtDQogIE5KX0NvdW50aWVzX0NsZWFuZWQgJT4lDQogIGdncGxvdCgpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oY29sb3Vycz1jKCJ3aGl0ZSIsICJibHVlIikpICsNCiAgZ2VvbV9zZihhZXMoZmlsbCA9IHBvcCkpIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpICsNCiAgdGhlbWUoYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpKQ0KDQoNCmdncGxvdGx5KE5KKQ0KDQpOSg0KDQpwbG90KE5KX0NvdW50aWVzX0NsZWFuZWRbInBvcCJdKQ0KYGBgDQoNCg0KYGBge3J9DQoNCiMgTG9jYXRpb24gb2YgSG9zcGl0YWxzIGluIE5KIG9uIGhlYXRtYXANCg0KSG9zbG9jIDwtIHJlYWQuY3N2KCJIb3NwaXRhbHNsb2MuY3N2IikNCg0KIyBPbmx5IG5lZWQgb3V0IHBhdGllbnQgY2VudGVycyANCg0KSG9zbG9jIDwtDQogIEhvc2xvYyAlPiUNCiAgZmlsdGVyKGdyZXBsKCJPdXRwYXRpZW50IiwgbmFtZSkpDQoNCg0KTkogPC0NCiAgTkpfQ291bnRpZXNfQ2xlYW5lZCAlPiUNCiAgZ2dwbG90KCkgKw0KICBzY2FsZV9maWxsX2dyYWRpZW50bihjb2xvdXJzPWMoIndoaXRlIiwgImJsdWUiKSkgKw0KICBnZW9tX3NmKGFlcyhmaWxsID0gcG9wKSkgKw0KICBnZW9tX3BvaW50KGRhdGEgPSBIb3Nsb2MsYWVzKHggPSBsb24seSA9IGxhdCxzaGFwZSA9ICJzcXVhcmUiLCBsYWJlbCA9IG5hbWUsY29sb3IgPSAib3JhbmdlIikpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKSArDQogIHRoZW1lKGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgdGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpDQogICAgICAgICkgKw0KICBsYWJzKHkgPSAiIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgdGl0bGUgPSAiMjAxMCBQb3B1bGF0aW9uIEhlYXRtYXBcbndpdGggT3V0cGF0aWVudCBjZW50ZXJzIGZyb20gQ1NIIikNCg0KDQoNCk5KDQoNCmdncGxvdGx5KE5KLHRvb2x0aXAgPSAibmFtZSIpDQoNCmBgYA0KDQo=